// Promise 类的api

// Promise 实例

function fun1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const result = "接口1的返回值";
      Math.random() < 0.7
        ? resolve(result)
        : reject(new Error("result1没有结果"));
    }, 400);
  });
}

function fun2() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const result = "接口2的返回值";
      Math.random() < 0.7
        ? resolve(result)
        : reject(new Error("result2没有结果"));
    }, 300);
  });
}

function fun3() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const result = "接口3的返回值";
      Math.random() < 0.7
        ? resolve(result)
        : reject(new Error("result3没有结果"));
    }, 200);
  });
}

// Promise.all([fun1(), fun2(), fun3()])
//   .then((res) => {
//     console.log(res);
//     document.body.innerHTML = `<h1>${res},成功</h1>`;
//   })
//   .catch((err) => {
//     console.log(err);
//     document.body.innerHTML = `<h1 style="color:red">${err},失败</h1>`;
//   });

// Promise.all 是干嘛的 : 用来处理多个异步的结果
// Promsie.all 的参数是什么 返回值是什么  : 参数是一个数组 promise实例/数据 返回值是一个Promise实例 .then
// Promise.all 的应用场景是什么 1. 多个异步的结果都要处理 2. 多个异步的结果都要成功才算成功
// Promise.all 的缺点是什么  1. 多个异步的结果都要成功才算成功 2. 有一个失败就失败了 不能拿到既有成功又有失败的结果

// Promise.allSettled : api和promise.all一样 但是不管成功还是失败都会返回结果
Promise.allSettled([fun1(), fun2(), fun3()]).then((res) => {
  console.table(res);
});

// 三个请求请求的是同一个接口 // 三个服务器
// 看看三个请求哪个最快 但是如果出错也会算为结果
Promise.race([fun1(), fun2(), fun3()])
  .then((res) => {
    console.log(res);
  })
  .catch((err) => {
    console.log(err);
  });


  // 有一个请求 5s之内没有结果 就算失败